
/**
 * 生成一个随机数
 * @param {*} min 最小值
 * @param {*} max 最大值
 * @returns 
 */
export function generate_random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

/**
 * 生成一个随机数
 * @param {*} min 最小值
 * @param {*} max 最大值
 * @returns 
 */
export function generate_double(min, max) {
    return Math.random() * (max - min + 1) + min;
}

/**
 * 随机获取集合内的某个下标
 * @param {*} array 集合
 * @returns 
 */
export function random_get_array(array) {
    return array[generate_random(0, array.length - 1)];
}

/**
 * 随机获取集合内的某个下标,并返回随机的下标
 * @param {*} array 集合
 * @returns 随机下标和下标数据
 */
export function random_get_array_return_index(array) {
    let index = generate_random(0, array.length);
    return [index, array[index]];
}


/**
 * 百分比概率判断函数
 * @param {number} percent 概率值（0~100）
 * @returns {boolean} 是否命中概率
 */
export function chance(percent) {
    if (percent === undefined) {
        return false;
    }
    // 边界处理：确保百分比在 0~100 之间
    let validPercent = Math.max(0, Math.min(100, percent));
    // 生成 0~100 的随机数并与概率值比较
    return Math.random() * 100 < validPercent;
}

/**
 * 随机获取一个五行
 */
export function random_wx() {
    return random_get_array(["金", "木", "水", "火", "土"]);
}

/**
 * 自定义百分比概率判断函数
 * @param {number} max 自定义的最大值
 * @param {number} percent 概率值（0 - max）
 * @returns {boolean} 是否命中概率
 */
export function custom_chance(max, percent) {
    if (max === undefined || percent === undefined) {
        return false;
    }
    percent = Math.floor(percent / max);
    return chance(percent);
}

/**
 * 根据所有物品概率配置信息返回命中的物品其中一项
 * 配置示例 {10:["金柳露",1]}
 * @param {*} items 
 * @returns 
 */
export function random_get_items_single(items) {
    for (const key in items) {
        let gl = Number(key);
        if (chance(gl)) {
            let value = items[key][0];
            let num = items[key][1];
            if (typeof value === 'function') {
                // 执行函数并返回结果
                let v = value();
                return [v, num];
            } else {
                // 直接返回值
                return [value, num];
            }
        }
    }
}


/**
 * 根据所有物品概率配置信息返回命中的物品集
 * 配置示例 {10:["金柳露",1]}
 * @param {*} items 
 * @returns 
 */
export function random_get_items(items) {
    let results = [];
    for (const key in items) {
        let gl = Number(key);
        if (chance(gl)) {
            let value = items[key][0];
            let num = items[key][1];
            if (typeof value === 'function') {
                // 执行函数并返回结果
                let v = value();
                results.push([v, num]);
            } else {
                // 直接返回值
                results.push([value, num]);
            }
        }
    }
    return results;
}
